#ifndef NANE_NULLPTR_H
#   define NANE_NULLPTR_H

namespace nane
{
    struct NullType {};
    static const NullType NullPtr = NullType();
    
    template<typename T>
    struct IsNullT
    {
        static const bool value = false;
    };

    template<>
    struct IsNullT<NullType>
    {
        static const bool value = true;
    };

    template<>
    struct IsNullT<NullType const>
    {
        static const bool value = true;
    };

    template<>
    struct IsNullT<NullType volatile>
    {
        static const bool value = true;
    };

    template<>
    struct IsNullT<NullType const volatile>
    {
        static const bool value = true;
    };    
} // namespace nane

#endif  // NANE_NULLPTR_H
